<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // es2021的逻辑赋值运算符
      let user = { name: "孙悟空", age: null };
      user.name ||= "Default Name"; // 如果name为false,则赋值
      user.age ??= 18; // 如果 age 为 null 或 undefined，则赋值
      console.log(user); // {name: '孙悟空', age: 18}

      /*
     &&=
     是一个逻辑与赋值操作符（Logical AND Assignment）。
     它用于将两个值进行逻辑与操作，并将结果赋值给左边的变量。这个操作符在ES2021中被引入。
     x &&= y; 等价于
     x = x && y;

     逻辑或赋值
     x ||= y 等价于 x = x||y
     空值合并赋值
     x ??= y 等价于 x = x??y
    */
      let a = true;
      a &&= false; // a 现在是 false

      let b = 0;
      b &&= 10; // b 现在是 0，因为 0 是 false 值

      let c = "Hello";
      c &&= "World"; // c 现在是 "Hello"，因为 "Hello" 是 truthy 值
      console.log('c',c)


      /**
       * &&   是逻辑与操作符，用于对两个表达式进行逻辑与操作。
       * 如果两个表达式都为真（truthy），则返回第二个表达式的值；
       * 否则返回第一个为假（falsy）的表达式的值
       *
       * ||   是逻辑或操作符，用于对两个表达式进行逻辑或操作。
       * 如果第一个表达式为真（truthy），则返回第一个表达式的值；
       * 否则返回第二个表达式的值。
       *
       *  ??   是空值合并操作符，用于对两个表达式进行空值合并操作。
       * 如果第一个表达式不是   null   或   undefined  ，则返回第一个表达式的值；
       * 否则返回第二个表达式的值。
      */
    </script>
  </body>
</html>
